Cloud Schedulerを使用して、定期的にPub/Subトピックにメッセージを送信する仕組みを構築する

Cloud Schedulerを使用して、定期的にPub/Subトピックにメッセージを送信する仕組みを構築する

初心者向けです。Cloud Schedulerを使用して、Pub/Subトピックにメッセージを送信することで、定期的なタスクを実行できます。
Clock Icon2025.01.22

概要

目的

Google Cloudのサービスを利用して、定期的なタスクを実行するという仕組みを構築していきます。ただし、今回の内容は特定の問題解決を行うというものではありません。

あくまでも、Google Cloudのサービスを理解するといった初歩的な目的のもと、ブログを作成しております。

メリット

Cloud Schedulerを活用することで、定期的なタスクを自動化し、手動操作の手間を大幅に削減することができます。また、柔軟なスケジュール設定が可能で、複雑なスケジュールも簡単に構築できます。

さらに、Pub/Subをはじめとする他のGoogle Cloudサービスと容易に連携できるため、さまざまなユースケースに対応した効率的なシステムを構築することが可能です。

全体的な流れ

  • Pub/Subトピックの作成
    • メッセージを送信するためのトピックを作成
  • サービスアカウントの権限付与
    • Cloud SchedulerがPub/Subトピックにアクセスできるように設定
  • Cloud Schedulerジョブの作成と動作確認
    • 定期的にメッセージを送信するジョブを作成し、動作を確認

実演

1. APIの有効化

今回は大前提として、Cloud Shellで操作をしていきます。
以下のコマンドを使用し、Cloud Pub/SubとCloud SchedulerのAPIを有効化していきます。

gcloud services enable cloudscheduler.googleapis.com pubsub.googleapis.com

2. Pub/Sub トピックの作成

以下のコマンドでトピックを作成していきます。

gcloud pubsub topics create my-scheduler-topic

my-scheduler-topicというトピックの作成を確認しました。
スクリーンショット 2025-01-21 9.38.49

3. デフォルトのサービスアカウントへ権限を付与

Cloud SchedulerがPub/Subトピックにメッセージを送信するための権限を持つサービスアカウントが必要です。
デフォルトのサービスアカウントに権限を付与していきます。(PROJECT_ID@appspot.gserviceaccount.comへの付与)

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member="serviceAccount:[PROJECT_ID]@appspot.gserviceaccount.com" \
    --role="roles/pubsub.publisher"

サービスアカウントへの権限付与を確認しました。
スクリーンショット 2025-01-21 10.20.35
※ 注意:デフォルトのサービスアカウントでは元々編集者ロールが割り当てられているため、適宜ロールを変更して運用するのが推奨されております。

4. Cloud Schedulerジョブの作成

Cloud Schedulerジョブを作成し、Pub/Subトピックにメッセージを送信するための設定をしていきます。

gcloud scheduler jobs create pubsub my-scheduler-job \
    --schedule="0 9 * * *" \
    --topic="my-scheduler-topic" \
    --message-body="hello, your muscle is nice" \
    --time-zone="Asia/Tokyo"

コードの解説

  • ジョブの作成
    • my-scheduler-jobという名前のCloud Schedulerジョブを作成
  • スケジュール設定
    • 毎日午前9時(JST)に実行されるように設定(--schedule="0 9 * * *")
  • メッセージ送信
    • Pub/Subトピックmy-scheduler-topicに「hello, your muscle is nice」というメッセージを送信
  • タイムゾーン指定
    • タイムゾーンを日本標準時(JST, Asia/Tokyo)に設定

ジョブが作成されたことを確認しました。
スクリーンショット 2025-01-21 10.27.11

5. 動作確認

Cloud Schedulerジョブを手動実行し、Pub/Subトピックにメッセージが送信されることを確認します。

ジョブの実行

以下のコマンドを実行すると、ジョブが即座に実行され、Pub/Subトピックにメッセージが送信されます。

gcloud scheduler jobs run my-scheduler-job

ジョブの実行が成功していることを確認しました。
スクリーンショット 2025-01-21 10.32.41

サブスクリプションの作成と結果の取得

次に、Pub/Subトピックに送信されたメッセージを確認するために、サブスクリプションを作成してメッセージを取得します。

サブスクリプションの作成

gcloud pubsub subscriptions create my-scheduler-subscription \
    --topic="my-scheduler-topic"

メッセージの取得

gcloud pubsub subscriptions pull my-scheduler-subscription --auto-ack

結果の表示
スクリーンショット 2025-01-21 10.40.20
無事にCloud Shellにて「hello, your muscle is nice」という文字が表示されました。これにより、Cloud Schedulerジョブが正常に実行され、Pub/Subトピックを通じてメッセージが正しく送信されたことがわかります。

まとめ

最後に、今回の内容の具体的なユースケースをおさらいしておきましょう。(ブログの内容だけでは何ができるというわけではないため)

  • 定期的なリマインダー通知
    • 毎朝9時にSlackやメールに「今日のタスク」を通知する仕組みを構築
  • データ収集のトリガー
    • 毎日決まった時間にAPIを呼び出し、データを収集してデータベースに保存する処理を開始
  • システムの状態監視
    • 定期的にシステムの稼働状況をチェックし、異常があればアラートを送信

Cloud SchedulerとPub/Subを活用することで、効率的かつ自動化された仕組みを簡単に構築できます。どちらもマネージドサービスのため、運用負荷も低いです。
積極的に活用することで、クラウドの良さを実感できることと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.